package com.yuan.gather.entity;


import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 采集计划实体
 *
 * @author zhaoff
 */
@Getter
@Setter
@Entity
@Table(name = "tbl_gather_plan")
public class GatherPlan implements Serializable {

    private static final long serialVersionUID = 1649789000386509455L;

    /**
     * 任务执行类型： 1 - 自动执行
     */
    public static final Integer PLAN_TYPE_AUTO = 1;

    /**
     * 任务执行类型： 2 - 手动执行
     */
    public static final Integer PLAN_TYPE_MANUAL = 2;

    /**
     * 资产状态： 0 - 未开始
     */
    public static final Integer STATE_UNSTART = 0;

    /**
     * 资产状态： 1 - 正在执行
     */
    public static final Integer STATE_RUNNING = 1;

    /**
     * 资产状态： 2 - 执行结束
     */
    public static final Integer STATE_END = 2;

    /**
     * 资产状态： 3 - 正在取消
     */
    public static final Integer STATE_CANCELLING = 3;

    /**
     * 资产状态：4 - 暂停
     */
    public static final Integer STATE_STOP = 4;

    /**
     * 任务类型： sagent采集，秒级上送
     */
    public static String TASK_TYPE_SAGENT = "3";

    /**
     * 任务类型：不常变化，与采集项中collectType对应
     */
    public static String TASK_TYPE_INFREQUENT_CHANGE = "2";

    /**
     * 任务类型：耗时，与采集项中collectType对应
     */
    public static String TASK_TYPE_CONSUMER = "1";

    /**
     * 任务类型：准实时采集，与采集项中collectType对应
     */
    public static String TASK_TYPE_REALTIME = "0";


    /**
     * ID
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 采集计划名称
     */
    @Column(name = "plan_name")
    private String planName;

    /**
     * 采集计划类型
     * 手动和自动两种类型
     */
    @Column(name = "plan_type")
    private int planType;

    /**
     * 任务状态,0:未执行 1: 正在执行 2:执行结束 3:正在取消
     */
    @Column(name = "state")
    private int state = STATE_UNSTART;

    /**
     * 执行周期信息
     * {
     * "active":{  --主动
     * "interval":2,
     * "type":"day/month",
     * "startAt":"2018-12-1 07:15:30"
     * },
     * "passive":{  --被动
     * "interval":2,
     * "type":"hour",
     * "startAt":"2018-12-1 07:15:30"
     * },
     * "realtime":{  --实时
     * "interval":5,
     * "type":"minute",
     * "startAt":"2018-12-1 07:15:30"
     * }
     * }
     **/
    @Type(type = "com.yuan.gather.common.mysql.userType.JsonType")
    private Map<String, Object> period = new HashMap<>();

    /**
     * 采集资产列表
     */
    /*@Column(name = "asset_ids")
    @Type(type = "com.yuan.gather.common.mysql.usertype.ArrayType",
            parameters = {@Parameter(name = "type", value = "java.lang.Integer")})
    private Integer[] assetIds;*/

    /**
     * 额外配置信息
     */
    @Type(type = "com.yuan.gather.common.mysql.userType.JsonType")
    private Map<String, Object> extra = new HashMap<>();

}
